Skip to main content

Browsersync + Gulp.js

当您在使用gulp构建您的项目时,您只需要require浏览器同步模块,利用API并进行选项配置。以下是一些流行项目中常见的用例,如谷歌的网络入门套件和其他项目。

安装

首先,您需要安装Browsersync和依赖包杯。如果你是第一次安装,那么你可以通过--save-dev的命令,将会这自动在你的package.json里添加依赖,下一次再安装时,你只需要

$ npm install
$ npm install browser-sync gulp --save-dev

然后,在您的gulpfile.js文件里使用它们。

var gulp        = require('gulp');
var browserSync = require('browser-sync').create();

// 静态服务器
gulp.task('browser-sync', function() {
browserSync.init({
server: {
baseDir: "./"
}
});
});

// 代理

gulp.task('browser-sync', function() {
browserSync.init({
proxy: "你的域名或IP"
});
});

SASS + CSS注入

通过流的方式创建任务流程,这样您就可以在您的任务完成后调用reload,所有的浏览器将被告知的变化并实时更新。因为Browsersync只在乎您的CSS在编译完成 finished后-注意:gulp.dest后调用重载。

var gulp        = require('gulp');
var browserSync = require('browser-sync').create();
var sass = require('gulp-sass');
var reload = browserSync.reload;

// 静态服务器 + 监听 scss/html 文件
gulp.task('serve', ['sass'], function() {

browserSync.init({
server: "./app"
});

gulp.watch("app/scss/*.scss", ['sass']);
gulp.watch("app/*.html").on('change', reload);
});

// scss编译后的css将注入到浏览器里实现更新
gulp.task('sass', function() {
return gulp.src("app/scss/*.scss")
.pipe(sass())
.pipe(gulp.dest("app/css"))
.pipe(reload({stream: true}));
});

gulp.task('default', ['serve']);

SASS和源地图

如果您使用gulp-ruby-sass与sourcemap: true选项,将会生成.map 文件。这些文件最终会被置于下游,在browserSync.reload()时接收它们,它会尝试重新加载页面(因为它不会在DOM里发现在任何.map文件)。 要解决这个问题,您可以使用gulp-filter包,以确保只有*.css 文件响应.reload-这样一来,您还是会得到CSS注入,而不是整个页面重载。

var gulp        = require("gulp");
var sass = require("gulp-ruby-sass");
var filter = require('gulp-filter');
var browserSync = require("browser-sync").create();

// 静态服务器 + 监听 scss/html 文件
gulp.task('serve', ['sass'], function() {

browserSync.init({
server: "./app"
});

gulp.watch("app/scss/*.scss", ['sass']);
gulp.watch("app/*.html").on('change', reload);
});

gulp.task('sass', function () {
return gulp.src('scss/**/*.scss')
.pipe(sass({sourcemap: true}))
.pipe(gulp.dest('css'))// Write the CSS & Source maps
.pipe(filter('**/*.css')) // Filtering stream to only css files
.pipe(browserSync.reload({stream:true}));
});

浏览器重载

有时候,您可能只是想完全重新加载页面(例如,处理一堆JS文件后),但您希望在任务发生后重载。这将在4.x.xgulp时变得更容易,但现在您可以做到以下几点:(确保您return从您的工作流,以确保browserSync.reload()被调用在正确的时间。

// 处理完JS文件后返回流
gulp.task('js', function () {
return gulp.src('js/*js')
.pipe(browserify())
.pipe(uglify())
.pipe(gulp.dest('dist/js'));
});

// 创建一个任务确保JS任务完成之前能够继续响应
// 浏览器重载
gulp.task('js-watch', ['js'], browserSync.reload);

// 使用默认任务启动Browsersync,监听JS文件
gulp.task('serve', ['js'], function () {

// 从这个项目的根目录启动服务器
browserSync({
server: {
baseDir: "./"
}
});

// 添加 browserSync.reload 到任务队列里
// 所有的浏览器重载后任务完成。
gulp.watch("js/*.js", ['js-watch']);
});

手动重载

如果创建了一个sass任务,在我们修改文件后会在浏览器里注入CSS,但是当HTML文件被更改时,浏览器将会被重新加载(手动重载)。

// 使用变量引用 `reload` 方法
var reload = browserSync.reload;

// 编译 SASS & 自动注入到浏览器
gulp.task('sass', function () {
return gulp.src('scss/styles.scss')
.pipe(sass({includePaths: ['scss']}))
.pipe(gulp.dest('css'))
.pipe(reload({stream:true}));
});

// 监听scss和html文件, 当文件发生变化后做些什么!
gulp.task('serve', ['sass'], function () {

// 从这个项目的根目录启动服务器
browserSync({
server: {
baseDir: "./"
}
});

gulp.watch("scss/*.scss", ['sass']);
gulp.watch("*.html").on("change", browserSync.reload);
});